package com.fau.wm.service;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.wm.entity.MedicalKeyValue;
import com.fau.wm.entity.MedicalAdmin;
import com.fau.wm.entity.MedicalLogistics;
import com.fau.wm.entity.MedicalOrdersAlreadyDelivery;
import com.fau.wm.entity.MedicalOrdersStorage;
import com.fau.wm.entity.MedicalOrdersWaitDelivery;
import com.fau.wm.util.Page;

/**
 * @desc 仓储中心订单管理接口
 * @author kangyj
 * @param <MedicalKeyValue>
 * @datetime 2014年11月28日,下午8:47:09
 */
public interface IOrdersManagerService {

	/**
	 * @desc 分页查询订单通过表
	 * @param ordersWaitDelivery 订单代发货实体类
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月28日,下午8:47:22
	 */
	public Page findOrdersWaitDelivery(MedicalOrdersWaitDelivery ordersWaitDelivery, Map<String, Object> map);
	
	/**
	 * @desc 订单发货
	 * @param ordersWaitDelivery
	 * @author kangyj
	 * @datetime 2014年12月6日,下午7:47:58
	 */
	public String delivery(MedicalOrdersWaitDelivery ordersWaitDelivery);
	
	/**
	 * @desc 批量导入发货
	 * @param admin
	 * @param file
	 * @return String
	 * @throws IOException
	 * @author kangyj
	 * @datetime 2014年11月29日,下午3:43:03
	 */
	public String importDelivery(MedicalAdmin admin, File file) throws Exception;
	
	/**
	 * @desc 分页查询已发货表
	 * @param ordersAlreadyDelivery 已发货表
	 * @param map 分页参数
	 * @return Page
	 * @author kangyj
	 * @datetime 2014年11月29日,上午1:05:14
	 */
	public Page findOrdersAlreadyDelivery(MedicalOrdersAlreadyDelivery ordersAlreadyDelivery, Map<String, Object> map);
	
	/**
	 * @desc 批量退单
	 * @param ordersIds 选中的订单Id
	 * @author kangyj
	 * @datetime 2014年11月29日,上午2:19:36
	 */
	public void ordersRetreat(String ordersIds);
	
	/**
	 * @desc 批量网退
	 * @param ordersIds 选中的订单Id
	 * @author liy
	 * @datetime 2014年12月13日,下午4:21:47
	 */
	public void ordersNetRetreat(String ordersIds);
	
	/**
	 * @desc 批量导入退单
	 * @param file 退单文件
	 * @return
	 * @throws IOException
	 * @author kangyj
	 * @datetime 2014年11月29日,下午3:31:44
	 */
	public String importRetreat(File file) throws Exception;
	
	/**
	 * @desc 订单签收
	 * @param ordersIds 批量选择订单id
	 * @param admin 当前用户
	 * @author kangyj
	 * @datetime 2014年11月29日,下午4:41:51
	 */
	public Map<String, Object> ordersSign(MedicalAdmin admin, String ordersIds);
	
	/**
	 * @desc 订单网签
	 * @param admin 当前用户
	 * @param ordersIds 批量选择订单id
	 * @author liy
	 * @datetime 2014年12月13日,下午3:12:05
	 */
	public void ordersNetSign(MedicalAdmin admin, String ordersIds);
	
	/**
	 * @desc 批量导入签收
	 * @param file 导入文件
	 * @param admin 当前用户
	 * @return
	 * @throws IOException
	 * @author kangyj
	 * @datetime 2014年11月30日,下午3:03:06
	 */
	public Map<String, Object> importSign(File file) throws Exception;
	
	/**
	 * @desc 查询总表订单
	 * @param ordersStorage 总表订单
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年11月30日,下午6:49:04
	 */
	public Page findAllOrdersByPage(MedicalOrdersStorage ordersStorage, Map<String, Object> map);
	
	/**
	 * @desc 查询系统物流公司集合
	 * @param admin 当前用户
	 * @return
	 * @author kangyj
	 * @datetime 2014年12月6日,下午6:06:44
	 */
	public List<MedicalLogistics> findLogisticsList(MedicalAdmin admin);
	
	/**
	 * @desc 批量修改物流公司
	 * @param ordersAlreadyDelivery
	 * @author kangyj
	 * @datetime 2014年12月14日,下午9:39:43
	 */
	public void editLogistics(MedicalOrdersAlreadyDelivery ordersAlreadyDelivery);
	
	/**
	 * @desc 订单发货-导出当前页
	 * @param ids订单ID
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月26日,下午2:27:51
	 */
	public Workbook exportOrdersCurrent(String ids) throws Exception;
	
	/**
	 * @desc 订单发货-导出全部
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月28日,下午4:38:31
	 */
	public Workbook exportOrdersAll(MedicalOrdersWaitDelivery waitDelivery) throws Exception;
	
	/**
	 * @desc 订单签收-导出当前页
	 * @param ids订单ID
	 * @return Workbook
	 * @throws Exception
	 * @author liy
	 * @datetime 2014年12月28日,上午11:05:57
	 */
	public Workbook exportSignOrdersCurrent(String ids) throws Exception;
	
	/**
	 * @desc 订单签收-导出全部
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月28日,下午4:18:16
	 */
	public Workbook exportSignOrdersAll(MedicalOrdersAlreadyDelivery delivery) throws Exception;
	
	/**
	 * @desc 订单退单-导出当前页
	 * @param ids 订单ID
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月28日,下午5:08:15
	 */
	public Workbook exportRetreatOrdersCurrent(String ids) throws Exception;
	
	/**
	 * @desc 订单退单-导出全部
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月28日,下午5:45:52
	 */
	public Workbook exportRetreatOrdersAll(MedicalOrdersAlreadyDelivery delivery) throws Exception;
	
	/**
	 * @desc 订单查询-导出当前页
	 * @param ids 订单ID
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月28日,下午6:10:30
	 */
	public Workbook exportQueryOrdersCurrent(String ids) throws Exception;
	
	/**
	 * @desc 订单查询-导出全部
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2014年12月28日,下午8:04:26
	 */
	public Workbook exportQueryOrdersAll(MedicalOrdersStorage ordersStorage) throws Exception;
	
	/**
	 * @desc 下载订单发货导入模板
	 * @param admin
	 * @return
	 * @throws Exception
	 * @author zhaoey
	 * @datetime 2015年4月7日,下午10:30:25
	 */
	public Workbook downloadDeliveryTemp(MedicalAdmin admin) throws Exception;
	
	/**
	 * @desc 查询系统中心
	 * @param typeName
	 * @return
	 * @author zhaoey
	 * @datetime 2015年4月11日,下午1:56:07
	 */
	public List<MedicalKeyValue> findSystemList(String typeName);
	
	/**
	 * @desc 查询订单状态
	 * @param systemType
	 * @return
	 * @author zhaoey
	 * @datetime 2015年4月11日,下午1:56:07
	 */
	public List<MedicalKeyValue> findOrderStatusList(String systemType);
	
}
